#CSV 与 JSON
CSV 和 JSON 是常见的数据交换格式。PowerShell 内置了对应的导入导出命令,可以直接在对象与文本之间转换,无需手动拼接字符串。
#CSV
#导入
Import-Csv 把 CSV 的每一行转换为一个对象,列名成为属性名:
> @'
Name,Score
Tom,88
Jerry,99
'@ | Set-Content ./scores.csv
> $rows = Import-Csv -Path ./scores.csv
> $rows | Where-Object { [int]$_.Score -ge 90 }
常用参数:
-Path- CSV 文件路径。-Delimiter- 指定分隔符,默认是逗号。-Header- 当文件没有表头时,用该参数提供列名。-Encoding- 指定文件编码。
注意 CSV 中的所有值都会被读取为字符串,参与数值比较或计算时应先转换类型。
#导出
Export-Csv 把对象转换为 CSV:
> Get-Process | Select-Object Id, ProcessName, CPU |
Export-Csv -Path ./processes.csv -NoTypeInformation
-NoTypeInformation不写入#TYPE行。PowerShell 7 默认已不写入类型信息,该参数主要用于兼容旧脚本。-Delimiter、-Encoding与导入时含义相同。-Append可以把结果追加到已有文件。
> $rows | Export-Csv -Path ./scores.csv -NoTypeInformation -Encoding utf8
#JSON
#转换为 JSON
ConvertTo-Json 把对象序列化为 JSON 字符串:
> $data = [pscustomobject]@{
Name = 'Tom'
Age = 20
Tags = @('a', 'b')
}
> $data | ConvertTo-Json
> $data | ConvertTo-Json -Depth 3 -Compress
-Depth指定最大序列化深度,默认是 2。-Compress输出紧凑格式,不添加缩进和换行。
#从 JSON 转换
ConvertFrom-Json 把 JSON 字符串转换为对象:
> $json = '{"Name":"Tom","Age":20,"Tags":["a","b"]}'
> $obj = $json | ConvertFrom-Json
> $obj.Name
-Depth指定最大解析深度。-AsHashtable返回哈希表而不是PSCustomObject,便于按字符串键访问。
> $h = $json | ConvertFrom-Json -AsHashtable
#读写文件
> $data | ConvertTo-Json -Depth 5 | Set-Content ./data.json -Encoding utf8
> $loaded = Get-Content ./data.json -Raw | ConvertFrom-Json
读取 JSON 文件时建议使用 Get-Content -Raw,避免逐行读取后再拼接。